const express = require("express");
const router = express.Router();
// 操作mysql数据库
const db = require("../db/db.js");
// 用于生成和校验token
const jwt = require("jsonwebtoken");
// 加密密钥
let secret = "xxffwwfvwf";

// 生成toke
const createToken = (data) => {
  return jwt.sign(
    data, // 要加密的数据(用户信息)
    secret, // 加密字符串
    {
      expiresIn: 600, // 设置生命周期,单位为秒
    }
  );
};

// 判断请求头中是否有token(token是否正确)的路由中间件(判断用户是否登录)
const checkToken = (req, res, next) => {
  // 获取请求头中的token
  let token = req.get("authorization");
  // 无token
  if (!token) {
    return res.json({
      code: 401,
      data: null,
      msg: "token不存在",
    });
  }
  // 有token校验token是否正确
  jwt.verify(token, secret, (err) => {
    if (err) {
      return res.json({
        code: 401,
        data: null,
        msg: "token已过期",
      });
    } else {
      // token正确放行
      next();
    }
  });
};

// 设置允许跨域的路由中间件
router.all("*", (req, res, next) => {
  res.setHeader("Access-Control-Allow-Origin", "*");
  next();
});

// 获取全部用户信息
router.get("/list", checkToken, function (req, res) {
  db.query(`select * from user`, (err, data) => {
    if (err)
      return res.json({
        code: 500,
        data: err,
        msg: "error",
      });
    res.json({
      code: 200,
      data: { userList: data },
      msg: "success",
    });
  });
});

// 注册登录
router.post("/login", function (req, res) {
  console.log(req.body);
  const { username, password } = req.body;
  db.query(
    `select * from user where name='${username}' and password='${password}'`,
    (err, data) => {
      if (err)
        return res.json({
          code: 500,
          data: err,
          msg: "error",
        });
      if (data.length > 0)
        return res.json({
          code: 200,
          data: null,
          msg: "登录成功",
        });
      db.query(
        `insert into user(name,password) values('${username}','${password}')`,
        (err, data) => {
          if (err)
            return res.json({
              code: 500,
              data: err,
              msg: "error",
            });
          res.json({
            code: 201,
            data: {
              token: createToken(req.body),
            },
            msg: "注册成功",
          });
        }
      );
    }
  );
});

module.exports = router;
